10 POKE53280,11:POKE53281,12:GOTO2770 20 PRINT"[147][151] "; 30 PRINT" [146]" 40 PRINT"[144] DISK UTILITIES BY DAN A. SIEBEN" 50 PRINT" 1 = SCRATCH (OR PURGE) PROGRAM" 60 PRINT" 2 = MERGE PROGRAMS":PRINT" 3 = RENAME PROGRAM" 70 PRINT" 4 = INITIALIZE DISK DRIVE":PRINT" 5 = FORMAT DISK" 80 PRINT" 6 = VALIDATE DISK" 90 PRINT" 7 = RENAME DISK":PRINT" 8 = WRITE-PROTECT DISK" 100 PRINT" 9 = PRINT DIRECTORY":PRINT" 0 = END" 110 PRINT" ENTER COMMAND (0-9)" 120 GETA$:A=VAL(A$):IFA<0ORA>9ORA$=""THEN120 130 IFA=0THENA=10 140 ONAGOTO150,950,750,2270,640,840,2130,2010,2340,940 150 CLR:RESTORE:REM SCRATCH PROGRAM 160 PRINT"[147]"SPC(13)"SCRATCH PROGRAM" 170 PRINT"LOAD DISK CONTAINING PROGRAM TO BE":PRINT"SCRATCHED, IN DRIVE, THEN:" 180 PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP." 190 GETA$:IFA$<>"S"ANDA$<>" "THEN190 200 IFA$="S"THEN20 210 DR$="0":D=VAL(DR$):DR$="I"+DR$:OPEN15,8,15,DR$:GOSUB530 220 OPEN 1,8,3,"#":GOSUB540 230 PRINT:PRINT "PRESS 'Y[146]' TO DELETE (OR PURGE) FILE":PRINT 240 Z$=CHR$(0) 250 T=18:S=1 260 PRINT#15,"U1:"3;D;T;S 270 PRINT#15,"B-P:"3;2+32*R 280 GET#1,A$:IF A$="" THEN A$=Z$ 290 IF ASC(A$)<129 THEN390 300 FOR K=5+32*R TO 20+32*R 310 PRINT#15,"B-P:"3;K 320 GET#1,A$:IF A$="" THEN PRINT" [146]";:GOTO340 330 PRINT A$; 340 NEXT 350 PRINT ,,"PURGE ?  [146][157]"; 360 GETA$:IFA$<>"Y" AND A$<>"N" THEN360 370 PRINT A$ 380 IF A$="Y" THEN GOSUB480 390 R=R+1:IF R<8 THEN260 400 PRINT#15,"B-P:"3;0 410 GET#1,A$:IFA$="" THENA$=Z$ 420 T=ASC(A$):IF T=0 THEN PRINT:PRINT "END OF DIRECTORY.":GOTO520 430 PRINT#15,"B-P:"3;1 440 GET#1,A$:IFA$=""THENA$=Z$ 450 S=ASC(A$):PRINT:PRINT "*** NEXT TRACK: ";:NU=T:GOSUB600:PRINT N$; 460 PRINT TAB(20);"NEXT SECTOR: ";:NU=S:GOSUB600 :PRINT N$;" ***":PRINT 470 R=0:GOTO260 480 PRINT#15,"B-P:"3;5+32*R-3 490 PRINT#1,CHR$(0); 500 PRINT#15,"U2:"3;D;T;S 510 GOSUB540:RETURN 520 CLOSE15:CLOSE1:GOTO910 530 REM CHECK DISK STATUS 540 INPUT#15,ER,ER$,TR,SE 550 IF ER=0 THEN RETURN 560 CLOSE 15:CLOSE 1 570 PRINT:PRINT "DISK ERROR! "; 580 PRINT ER;ER$;TR;SE 590 GOTO920 600 REM FORMAT (null)S 610 N$=MID$(STR$(NU),2) 620 IF LEN(N$)<2 THEN N$="0"+N$ 630 RETURN 640 CLR:RESTORE:REM FORMAT DISK 650 PRINT"[147] FORMATTING DISKS" 660 PRINT"REMEMBER: EVERYTHING ON THE DISK BEING [197][197][197][197][197][197][197][197] "; 670 PRINT"FORMATTED WILL BE DESTROYED.!" 680 PRINT"INSERT DISK DESIRED THEN:":PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP." 690 GETA$:IFA$<>"S"ANDA$<>" "THEN690 700 IFA$="S"THEN20 710 INPUT"WHAT IS THE DISK NAME";D$ 720 PRINT:INPUT"WHAT IS THE DISK ID";E$ 730 OPEN15,8,15:PRINT#15,"N8:";D$",";E$:CLOSE15,8,15 740 GOTO910 750 CLR:RESTORE:REM RENAMING PROGRAMS 760 PRINT"[147]"SPC(11)"RENAMING PROGRAMS" 770 PRINT"ENTER DISK CONTAINING PROGRAM TO BE":PRINT"RENAMED, THEN:" 780 PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP." 790 GETA$:IFA$<>"S"ANDA$<>" "THEN790 800 IFA$="S"THEN20 810 INPUT"WHAT FILE IS TO BE RENAMED";B$:INPUT"WHAT IS THE NEW FILE NAME";C$ 820 OPEN15,8,15:PRINT#15,"R8:";C$"=";B$:CLOSE15,8,15 830 GOTO910 840 CLR:RESTORE:REM VALIDATING DISK 850 PRINT"[147]"SPC(12)"VALIDATING DISK" 860 PRINT"INSERT DISK DESIRED, THEN:" 870 PRINT"'SPACE' TO EXECUTE OR 'S' TO STOP." 880 GETQ$:IFQ$<>" "ANDQ$<>"S"THEN880 890 IFQ$="S"THEN20 900 PRINT"VALIDATING........":OPEN15,8,15:PRINT#15,"V":CLOSE15,8,15:GOTO910 910 PRINT"COMPLETE.":GOTO930 920 PRINT"FUNCTION NOT COMPLETED!!" 930 FOREE=1TO4000:NEXT:GOTO20 940 END 950 CLR:RESTORE:REM MERGING PROGRAMS 960 DIMA(500),A$(500),N$(1) 970 MP=2049:PRINT"[147]"SPC(13)"MERGE PROGRAMS" 980 PRINT"ENTER DISK CONTAINING BOTH PROGRAMS":PRINT"TO BE MERGED, THEN: [197][197][197][197] 990 [153]"'SPACE' TO EXECUTE OR 'S' TO STOP." 1000 [161]A$:[139]A$[179][177]"S"[175]A$[179][177]" "[167]1000 1010 [139]A$[178]"S"[167]20 1020 [133]"NAME OF ORIGINAL PROGRAM";N$(0) 1030 [153]:[133]"NAME OF PROGRAM TO MERGE";N$(1) 1040 S$[178]N$(0) 1050 [133]"SAVE UNDER WHAT NAME";S$ 1060 [159]15,8,15 1070 [152]15,"I" 1080 X[178]0:[141]1180:E1[178]P[171]1:P2[178]P:X[178]1:[141]1180:E2[178]P[171]1 1090 [153]"SAVING ";S$ 1100 [159]2,8,2,"@0:"[170]S$[170]",P,W":[141]1350 1110 [152]2,[199](1);[199](8); 1120 [139]A(P2)[178]A(P1)[167]Z[178]P1:P1[178]P1[170]1:P2[178]P2[170]1:[137]1150 1130 [139]A(P2)[179]A(P1)[167]Z[178]P2:P2[178]P2[170]1:[137]1150 1140 [139]A(P2)[177]A(P1)[167]Z[178]P1:P1[178]P1[170]1 1150 MP[178]MP[170][195](A$(Z))[170]2:X[178][181](MP[173]256):Y[178]MP[171]256[172]X 1160 [152]2,[199](Y);[199](X);A$(Z);:[139]P1[179]E1[176]P2[179]E2[167]1120 1170 [152]2,[199](0);[199](0);:[160]2:[160]15:[137]910 1180 [153]"LOADING "N$(X) 1190 [159]2,8,2,"0:"[170]N$(X)[170]",P,R" 1200 [141]1350 1210 [161]#2,A$,B$ 1220 [161]#2,A$,B$ 1230 [139]A$[178]""[175]B$[178]""[167]A(P)[178]65000:P[178]P[170]1:[160]2:[142] 1240 [161]#2,A$ 1250 [139]A$[178]""[167]A$[178][199](0) 1260 X[178][198](A$):A$(P)[178]A$ 1270 [161]#2,A$ 1280 [139]A$[178]""[167]A$[178][199](0) 1290 A(P)[178]X[170]256[172][198](A$):A$(P)[178]A$(P)[170]A$ 1300 [161]#2,A$ 1310 [139]A$[178]""[167]A$[178][199](0) 1320 A$(P)[178]A$(P)[170]A$:[139]A$[179][177][199](0)[167]1300 1330 P[178]P[170]1 1340 [137]1220 1350 [132]15,EN,EM$,ET,ES 1360 [139]EN[178]0[167][142] 1370 [153]"DISK ERROR" 1380 [153]EN;EM$;ET;ES 1390 [160]2:[160]15 1400 [137]920 1410 [156]:[140]:[143] PRINT DIRECTORY 1420 [153]"LOAD"[166]11)"PRINT DIRECTORIES":[153]"INSERT DISK DESIRED, THEN:" 1430 [153]"'SPACE' TO EXECUTE OR 'S' TO STOP." 1440 [161]Q$:[139]Q$[179][177]" "[175]Q$[179][177]"S"[167]1440 1450 [139]Q$[178]"S"[167]20 1460 [139]Y[178]2[176]Y[178]3[167]2430 1470 [134]FX$(256),FT$(256),FL(256),TT(256):N[178][171]1:[129]I[178]1[164]256:FX$(I)[178]"":[130]:X[178]221 1480 BL$[178]" ":[129]I[178]1[164]40:BL$[178]BL$[170]"CLOSE":[130]:[160]15:[159]15,8,15:[159]1,8,0,"$0" 1490 [141]1870:[161]#1,A$,B$ 1500 W[178]51:L$[178]"":[133]"PRINTOUT HEADER";L$ 1510 [139][195](L$)[177]22[167][153]"HEADER TOO LONG-MAXIMUM 22 CHARACTERS.":[137]1500 1520 [161]#1,A$,B$:[161]#1,A$,B$:C[178]0:[139]A$[179][177]""[167]C[178][198](A$) 1530 [139]B$[179][177]""[167]C[178]C[170][198](B$)[172]256 1540 N[178]N[170]1:FL(N)[178]C 1550 [161]#1,B$:[139]ST[179][177]0[167]1640 1560 [139]B$[179][177][199](34)[167]1550 1570 N$[178]"" 1580 [161]#1,B$:[139]B$[179][177][199](34)[167]N$[178]N$[170]B$:[137]1580 1590 FX$(N)[178]N$ 1600 [161]#1,B$:[139]B$[178][199](32)[167]1600 1610 C$[178]"" 1620 C$[178]C$[170]B$:[161]#1,B$:[139]B$[179][177]""[167]1620 1630 FT$(N)[178][200](C$,3):[139]ST[178]0[167]1520 1640 [160]1:BF[178]FL(N):N[178]N[171]1:[143] GOSUB1910 1650 [133]"ALPHABETICALLY SORTED (Y/N) CMDCMDCMD";G$ 1660 [139]G$[179][177]"N"[175]G$[179][177]"Y"[167][153]"ONON";:[137]1650 1670 [141]1970 1680 [160]3:[159]3,4:[153]"PRINTING DIRECTORY" 1690 [152]3,[199](176);:[129]I[178]1[164]51:[152]3,[199](192);:[130]:[152]3,[199](174) 1700 [152]3,[199](X);[166]51);[199](X) 1710 T2$[178]FX$(0):[139]L$[179][177]""[167]T2$[178]T2$[170]" CLOSE("[170]L$[170]")" 1720 T$[178][199](X)[170]" >>> "[170]FX$(0) 1730 [139]L$[178]""[167]T$[178]T$[170][202](BL$,1,W[171][195](T$)[171]1):[137]1750 1740 K[178]W[171]2[171][195](T$)[171][195](L$):T$[178]T$[170][202](BL$,1,K[171]1)[170]"("[170]L$[170]")" 1750 T$[178]T$[170]" "[170][199](X):[152]3,T$ 1760 [152]3,[199](X);[166]51);[199](X) 1770 [152]3,[199](171);:[129]I[178]1[164]51:[152]3,[199](192);:[130]:[152]3,[199](179) 1780 [152]3,[199](X);[166]51);[199](X):L[178]9:K[178][181]((N[170]1)[173]2):[129]I[178]1[164]K 1790 T$[178][199](X):J[178]I:[141]1910:T$[178]T$[170]" ":J[178]K[170]I:[141]1910:T$[178]T$[170]" "[170][199](X) 1800 [152]3,T$:L[178]L[170]1:[130]:[152]3,[199](X);[166]51);[199](X) 1810 P[178][181]((BF[172]100[173]664)[170].5):P$[178][202]([196](P),2) 1820 T$[178][199](X)[170][202](BL$,1,14)[170][196](BF)[170]" BLOCKS ("[170]P$[170]"%) FREE" 1830 T$[178]T$[170][202](BL$,1,W[171][195](T$)[170]1)[170][199](X):[152]3,T$ 1840 [129]I[178]L[164]27:[152]3,[199](X);[166]51);[199](X):[130] 1850 [152]3,[199](173);:[129]I[178]1[164]51:[152]3,[199](192);:[130]:[152]3,[199](189) 1860 [152]3:[160]3:[160]15:[137]910 1870 [132]15,ER,ER$:[139]ER[179]20[167][142] 1880 [139]EF[178]74[176]ER[178]21[167]ER$[178]ER$[170]"--IS DISK INSERTED?":[137]1900 1890 ER$[178]"DISK ERROR"[170][196](ER)[170]": "[170]ER$ 1900 [153]ER$:[137]920 1910 T[178]TT(J):[139]T[178]0[167]T$[178]T$[170][202](BL$,1,24):[142] 1920 [139]FL(T)[179]100[167]T$[178]T$[170]"CLOSE" 1930 [139]FL(T)[179]10[167]T$[178]T$[170]"CLOSE" 1940 T$[178]T$[170][202]([196](FL(T)),2)[170]"CLOSE"[170]FX$(T) 1950 [139][195](FX$(T))[179]16[167]T$[178]T$[170][202](BL$,1,16[171][195](FX$(T))) 1960 T$[178]T$[170]"CLOSE"[170][200](FT$(T),3):[142] 1970 [129]I[178]1[164]N:TT(I)[178]I:[130]:[139]G$[178]"N"[167][142] 1980 [129]I[178]1[164]N[171]1:S[178]I:[129]J[178]I[170]1[164]N:[139]FX$(TT(J))[179]FX$(TT(S))[167]S[178]J 1990 [130]J:[139]S[179][177]I[167]T[178]TT(I):TT(I)[178]TT(S):TT(S)[178]T 2000 [130]I:[142] 2010 [156]:[140]:[143] DISK PROTECTION 2020 [153]"LOAD"[166]11)"WRITE-PROTECT DISK" 2030 [153]"NOTE: A WRITE-PROTECTED DISKS DOES NOT" 2040 [153]"ALLOW ANY SAVES TO IT, AND ONLY REFOR- MATTING WILL REVERSE IT." 2050 [153]"INSERT DISK TO WRITE-PROTECT, THEN:" 2060 [153]"'SPACE' TO BEGIN OR 'S' TO STOP." 2070 [161]A$:[139]A$[179][177]" "[175]A$[179][177]"S"[167]2070 2080 [139]A$[178]"S"[167]20 2090 [159]15,8,15,"I":[159]8,8,8,"#" 2100 [152]15,"UA:8,0,18,0":[152]15,"B-P:8,2" 2110 [152]8,[199](1);:[152]15,"UB,8,0,18,0" 2120 [152]15,"I":[160]8:[160]15:[137]910 2130 [156]:[140]:[143] RENAME DISK 2140 [153]"LOAD"[166]14)"RENAME DISK" 2150 [153]"ENTER DISK TO BE RENAMED, THEN:" 2160 [153]"'SPACE' TO EXECUTE OR 'S' TO STOP." 2170 [161]A$:[139]A$[179][177]"S"[175]A$[179][177]" "[167]2170 2180 [139]A$[178]"S"[167]20 2190 [159]15,8,15:[159]2,8,2,"#":[141]2240:NN$[178]DN$ 2200 [133]"NEW NAME";NN$:[139][195](NN$)[177]16[167][153][163]14)"TOO LONG!WAIT":[137]2200 2210 NN$[178]NN$[170]"CLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSECLOSE":[152]15,"B-P";2;144 2220 [152]2,[200](NN$,16);:[152]15,"U2:";2;0;18;0:[141]2240 2230 [152]15,"IO":[160]2:[160]15:[137]910 2240 [152]15,"U1:";2;0;18;0:[152]15,"B-P:";2;144:DN$[178]"" 2250 [129]I[178]1[164]16:[161]#2,A$:DN$[178]DN$[170]A$:[130] 2260 [153]"DISK NAME IS: "DN$:[142] 2270 [156]:[140]:[143] INITIALIZING DISK 2280 [153]"LOAD"[166]8)"INITIALIZING DISK DRIVE" 2290 [153]"THIS WILL RESTORE THE DISK DRIVE TO ITS ORIGINAL POWER-ON STATE. SIM 2300 PRINT"HIT 'SPACE' TO EXECUTE OR 'S' TO STOP." 2310 GETQ$:IFQ$<>" "ANDQ$<>"S"THEN2310 2320 IFQ$="S"THEN20 2330 PRINT"INITIALIZING........":OPEN15,8,15:PRINT#15,"I":CLOSE15,8,15:GOTO910 2340 CLR:RESTORE:REM PRINT DIRECTORY 2350 PRINT"[147]"SPC(11)"PRINT DIRECTORIES" 2360 PRINT"THIS PROGRAM WILL ALPHABETIZE AND PRINT" 2370 PRINT"THE DIRECTORY OF ANY DISK. CHOOSE ONE:" 2380 PRINT" 1 = PRINT DISK SIZE ON PRINTER":PRINT" 2 = PRINT SHEET FORM"; 2390 PRINT" ON PRINTER":PRINT" 3 = PRINT ON SCREEN":PRINT" 4 = RETURN TO MAIN MENU" 2400 GETA$:IFA$<"1"ORA$>"4"ORA$=""THEN2400 2410 Y=VAL(A$):ONYGOTO1410,2420,2420,20 2420 GOTO1420 2430 PRINT"[145]USE 'SHIFT' KEY TO SLOW PRINTING, OR HIT'SHIFT LOCK' TO STOP IT." 2440 PRINT"READING THE DIRECTORY":DIMF$(144):B=6:C=2:Q$=CHR$(34):R$="" 2450 SP$=" " 2460 OPEN1,8,0,"$":GET#1,A$,B$ 2470 GET#1,A$,B$:GET#1,A$,B$:NB=ASC(A$+CHR$(0))+256*ASC(B$+CHR$(0)) 2480 GET#1,B$:IFST<>0THEN2560 2490 IFB$<>CHR$(34)THEN2480 2500 GET#1,B$:IFB$<>CHR$(34)THENS$=S$+B$:GOTO2500 2510 GET#1,B$:IFB$=CHR$(32)THEN2510 2520 C$="":IFA=0THENC$=" " 2530 C$=C$+B$:GET#1,B$:IFB$<>""THEN2530 2540 F$(A)=LEFT$(R$+Q$+S$+Q$+SP$,19)+LEFT$(C$,B)+MID$(STR$(NB)+SP$,2,C) 2550 S$="":R$="":A=A+1:B=3:C=5:IFST=0THEN2470 2560 CLOSE1:N=A-1:BF$=MID$(STR$(NB)+" BLOCKS FREE,"+STR$(N)+" FILES.",2) 2570 INPUT"ALPHABETICALLY SORTED (Y/N) [157][157][157]";G$:IFG$="N"THEN2680 2580 IFG$<>"Y"THENPRINT"[145][145]";:GOTO2570 2590 M=N 2600 M=INT(M/2):IFM=0THEN2680 2610 J=1:K=N-M 2620 I=J 2630 L=I+M:CM=CM+1:IFF$(I)KTHEN2600 2670 GOTO2620 2680 IFY=2THENOPEN4,4:PRINT"PRINTING DIRECTORY":CMD4 2690 IFY=3THENPRINT"[147]" 2700 C=2:FORI=0TON:PRINTRIGHT$(F$(I),C)LEFT$(F$(I),LEN(F$(I))-C):C=5 2710 IFPEEK(653)THEN2710 2720 NEXT:PRINTBF$:IFY=2THENPRINT:PRINT:PRINT:PRINT#4:CLOSE4:GOTO2760 2730 PRINT"HIT ANY KEY TO RETURN TO THE MAIN MENU." 2740 GETY$:IFY$=""THEN2740 2750 GOTO20 2760 GOTO910 2770 VE=0:PRINT"[147]"; 2780 PRINT"[151] "; 2790 PRINT" [146]" 2800 M$="DISK UTILITIES " 2810 PRINT"[144]";:FORX=1TOLEN(M$) 2820 QQ=ASC(MID$(M$,X,1)):IFQQ=46ORQQ=32THENK=K+1:CH=QQ:GOTO2840 2830 FORCH=64TOQQ:REMASC(MID$(M$,X,1)) 2840 IFQQ=46THENCH=46 2850 IFCH>127ANDCH<>46ANDCH<160THENCH=160 2860 POKE214,VE:PRINT 2870 PRINTTAB(X+(39-LEN(M$))/2); 2880 PRINTCHR$(CH);:IFK>0THENK=0:NEXTX:GOTO2990 2890 NEXTCH,X 2990 PRINT"BY DAN A. SIEBEN":GOTO50